package solicitudesApp.Functions;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;

import sMySQLappTemplate.Core.Command;
import sMySQLappTemplate.Core.Fechas;
import sMySQLappTemplate.Core.FeatureTemplate;
import solicitudesApp.Core.ApplicationsAppCore;
import solicitudesApp.Core.TablaPedidos;
import solicitudesApp.GUI.FormularioAyMSolicitud;

public class ModificarSolicitud extends FeatureTemplate
{
	protected int idSolActual;
	protected TablaPedidos dataPedidos;
	protected DefaultComboBoxModel dataTiposSolicitudes;
	protected DefaultListModel dataTiposRequisitos;
	
	protected String interesadoApellido;
	protected String interesadoNombre;
	protected String interesadoDNI;
	protected String interesadoTel;

	public ModificarSolicitud(ApplicationsAppCore app)
	{
		super(app);
		dataPedidos = new TablaPedidos();
		dataTiposSolicitudes = new DefaultComboBoxModel();
		dataTiposRequisitos = new DefaultListModel();
		registarBoton(app);
	}	
	
	protected void registarBoton(ApplicationsAppCore app)
	{
		app.registerButtonForApplicationsTools(new modSolicitud(this), "/images/Whack Notepad ++ modificar.png", "Modificar Solicitud (Agregar Pedido)");
	}	
	
	@SuppressWarnings("unchecked")
	private class modSolicitud extends Command
	{

		public modSolicitud(FeatureTemplate feature) {
			super(feature);
			// TODO Auto-generated constructor stub
		}

		@Override
		public Object ExecCommand(Object... args) 
		{
			try {
				idSolActual = ((ApplicationsAppCore)appCore).getIdSolicitudSeleccionada();
				cargarTiposSolicitudes();
				cargarTiposRequisitos();
				cargarTablaPedidos();
				cargarDatosInteresado();
				new FormularioAyMSolicitud(this.receiver, false);
			} 
			catch (Exception e)	{
				// TODO cartelito mejorado de: debe seleccionar una solicitud
				JOptionPane.showMessageDialog(null, "Debe Seleccionar una Solicitud", "- ERROR MOLESTO -", JOptionPane.ERROR_MESSAGE);
			}
			return null;
		}		
	}
	
	public void cargarTiposSolicitudes()
	{
		try {
			String query = "SELECT Denominacion " +
							 "FROM Solicitudes JOIN Tipos_Solicitud " +
							 "WHERE Denominacion = Tipo_Solicitud_Denominacion AND " +
							 	   "idSolicitud = " + idSolActual + ";";
			this.appCore.populateComboBox(dataTiposSolicitudes, query);
		} catch (SQLException e) {	
			// TODO cartelito de Error de Funcionalidad
			e.printStackTrace();
		}
	}
	
	public void cargarTiposRequisitos()
	{
		try {
			String solicitud = dataTiposSolicitudes.getSelectedItem().toString();
			String query = "select Tipo_Requisito_Denominacion " +
							  "from requiere " +
							  "where Tipo_Solicitud_Denominacion = '" +solicitud+ "';";
			appCore.populateList(dataTiposRequisitos, query);
		} catch (SQLException e) {	
			// TODO cartelito de Error de Funcionalidad
			e.printStackTrace();
		}
	}
	
	public void cargarTablaPedidos()
	{	
		try {
			String query = "SELECT Descripcion, fecha_alta " +
							 "FROM Pedidos " +
							 "WHERE Solicitud_idSolicitud = " + idSolActual + " AND " +
							 	   "fecha_baja is null; ";			
			appCore.populateTable(dataPedidos, query);
		} catch (SQLException e) {
			// TODO Cartelito de Error de Funcionalidad
			e.printStackTrace();
		}
	}
	
	public void cargarDatosInteresado()
	{
		try {
			interesadoApellido = appCore.getValue(queryInteresado("Apellido")).toString();
			interesadoNombre = appCore.getValue(queryInteresado("Nombres")).toString();
			interesadoDNI = appCore.getValue(queryInteresado("DNI")).toString();
			interesadoTel = appCore.getValue(queryInteresado("tel")).toString();
		} catch (SQLException e) {
			// TODO Controlas como se va el getValue si el interesado no existe
			// TODO Cartelito de error de funcionalidad
			e.printStackTrace();
		}
	}
	
	protected String queryInteresado(String dato)
	{
		return new String ("SELECT " + dato + " " +
							 "FROM Solicitudes JOIN (Personas JOIN Interesados) " +
							 "WHERE DNI = Persona_DNI AND " +
							       "DNI = Interesado_Persona_DNI AND " +
							       "idSolicitud = " + idSolActual + ";");
	}
	
	public TablaPedidos getDataPedidos() {
		return dataPedidos;
	}	
	
	public DefaultComboBoxModel getDataTiposSolicitudes() {
		return dataTiposSolicitudes;
	}

	public DefaultListModel getDataTiposRequisitos() {
		return dataTiposRequisitos;
	}
	
	public String getInteresadoApellido() {
		return interesadoApellido;
	}

	public String getInteresadoNombre() {
		return interesadoNombre;
	}

	public String getInteresadoDNI() {
		return interesadoDNI;
	}

	public String getInteresadoTel() {
		return interesadoTel;
	}

	public void  agregarPedido(String desc)
	{
		try {
			// TODO revisar la fecha de la consulta
			String query = "INSERT INTO pedidos (Descripcion, Solicitud_idSolicitud, fecha_alta) " +
									    "VALUES ('" + desc + "'," + idSolActual + " , '"+Fechas.convertirDateADateSQL(new Date())+ "');";
			this.appCore.sendCommand(query);
			this.cargarTablaPedidos();
		} catch (SQLException e) {
			// TODO Mensaje de Error de la funcionalidad
			e.printStackTrace();
		}
	}	
	
	public void eliminarPedido(String desc, Date Fecha)
	{
		try {
			String query = "SELECT idPedidos FROM Pedidos " +
							  "WHERE Descripcion = '"+ desc +"' AND " +
							  		"fecha_alta = '"+Fechas.convertirDateADateSQL(Fecha)+"';";
			ResultSet resp = this.appCore.sendConsult(query);
			if (resp.next())
			{
				int idPedido = resp.getInt(1);
				query = new String("UPDATE Pedidos SET fecha_baja=CURDATE() " +
									 "WHERE idPedidos = " + idPedido + ";");
				this.appCore.sendCommand(query);
				this.cargarTablaPedidos();
			}
			else return;
		} catch (SQLException e1) {
			// TODO Mensaje de Error de la funcionalidad
			e1.printStackTrace();
		}
	}
}